package com.example.demo.controller;

import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;
import java.nio.file.Files;

@Controller
@Slf4j
public class UploadController {

    @GetMapping("/index")
    public String uploadPage(){
        return "index";
    }

    @PostMapping("/index")
    @ResponseBody
    public String create(@RequestPart MultipartFile file,String stuID,String labID) throws IOException{
        /**
         * @function 条件判断
         * @return 提示信息
         */
        if(file.isEmpty()){
            return "错误：你没有选择文件。";
        }
        if(stuID.isEmpty()) {
            return "错误：你没输入学号姓名。";
        }else{
            if (!isExpression(stuID)) {
                return "错误：输入学号姓名的格式有误。";
            }
        }
        if(labID.equals("lab0")){
            return "错误：你没有选择实验次数。";
        }
        /**
         * @function 文件处理
         */
        String fileName = file.getOriginalFilename(); //获取原文件名称及后缀名
        String suffixName=fileName.substring(fileName.lastIndexOf("."));//获取文件后缀
        /* 拼接成新的文件名格式：学号姓名-实验n */
        String newName=labID+"-"+stuID+suffixName;
        String filePath = FileConfig.uploadpath+newName;
        File dest = new File(filePath);
        if (dest.exists()){
            File oldFile=new File(dest.getAbsolutePath());
            if (oldFile.delete()){    //如果文件已经存在，则再次提交会被覆盖
                System.out.println("文件更新："+dest.getAbsolutePath());
                Files.copy(file.getInputStream(),dest.toPath());    //文件覆盖
            }
            return "已被更新："+dest.getAbsolutePath();
        }else{
            Files.copy(file.getInputStream(),dest.toPath());
            System.out.println("提交成功："+dest.getAbsolutePath());
        }
        return "提交成功："+dest.getAbsolutePath();
    }
    /**
     * 输入格式判断
     * @param str 待校验字符串
     * @return true 学号姓名；false 其他
     * */
    public static boolean isExpression(String str) {
        return str.matches("^([0-9]+)([\u4e00-\u9fa5]+)$");
    }
}
